﻿using System;
using System.Collections.Generic;
using Onshi.POS.Modelo.Objetos;

namespace Onshi.POS.Modelo.Entidades
{
    [Serializable()]
    public abstract class EntidadAbstracta<TRubro, TRegistro, TDetalle> : EntidadBase<Int32>
        where TRubro : Rubro
        where TRegistro : Registro
        where TDetalle : Detalle
    {
        #region Constructores

        public EntidadAbstracta()
            : base()
        {
        }

        #endregion

        #region Atributos

        private TDetalle detalle;
        private String codigo;
        private String nombre;
        private TRubro rubro;
        private List<TRegistro> registros;
        private Boolean estaEliminado;
        private Boolean tieneObservacion;
        private Boolean tieneImagen;

        #endregion

        #region Propiedades

        public Boolean TieneImagen
        {
            get
            {
                if (Detalle == null)
                    return tieneImagen;
                else
                    return Detalle.Imagen != null ? true : false;
            }
            set { tieneImagen = value; }
        }

        public Boolean TieneObservacion
        {
            get
            {
                if (Detalle == null)
                    return tieneObservacion;
                else
                    return Detalle.Observacion != String.Empty ? true : false;
            }
            set { tieneObservacion = value; }
        }

        public TDetalle Detalle
        {
            get { return detalle; }
            set { detalle = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public String Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        public TRubro Rubro
        {
            get { return rubro; }
            set { rubro = value; }
        }

        public List<TRegistro> Registros
        {
            get { return registros; }
            set { registros = value; }
        }

        public Boolean EstaEliminado
        {
            get { return estaEliminado; }
            set { estaEliminado = value; }
        }

        #endregion

        #region Metodos

        public override String ToString()
        {
            return String.Format("[{0}] {1}", codigo, nombre);
        }

        #endregion
    }
}
